// 文件上传工具方法
import { api } from '@/api/index.js';

export const uploadFile = (files) => {
    return new Promise((resolve, reject) => {
        // 检查文件列表是否有效
        if (!files || !Array.isArray(files) || files.length === 0) {
            uni.showToast({ title: '无效的文件数据', icon: 'none' });
            reject(new Error('Invalid files'));
            return;
        }
        // 初始化上传结果
        const uploadResults = {
            code: 200, // 假设上传整体成功
            failedResults: [], // 存储上传失败的文件
            successResults: [], // 存储上传成功的文件信息
            totalFiles: files.length, // 总文件数
            msg: '', // 返回的消息
        };
        // 创建上传任务
        const uploadPromises = files.map((file) => {
            return new Promise((resolve, reject) => {
                if (!file.path) {
                    console.error('文件路径为空:', file);
                    uni.showToast({ title: '文件路径为空', icon: 'none' });
                    uploadResults.failedResults.push(file);
                    resolve(); // 跳过该文件，不中断其他文件上传
                    return;
                }
                // 调用上传API
                uni.uploadFile({
                    url: import.meta.env.VITE_BASE_API + api.uploadFile, // 后端上传接口
                    filePath: file.path, // 文件路径
                    name: 'file', // 后端接收的字段名
                    formData: {}, // 可选的表单数据
                    success: (uploadRes) => {
                        const data = JSON.parse(uploadRes.data); // 假设服务器返回 JSON 格式
                        if (data.code === 200) {
                            uploadResults.successResults.push(data.successResults[0]); // 添加成功结果
                        } else {
                            uploadResults.failedResults.push(file); // 添加失败结果
                        }
                        resolve(data);
                    },
                    fail: (err) => {
                        console.error('上传失败:', err);
                        uploadResults.failedResults.push(file);
                        resolve(); // 不中断其他文件上传
                    },
                });
            });
        });
        // 等待所有文件上传完成
        Promise.all(uploadPromises).then(() => {
            // 根据上传结果更新消息
            if (uploadResults.failedResults.length === 0) {
                uploadResults.msg = `已成功上传${uploadResults.successResults.length}个文件`;
            } else {
                uploadResults.msg = `上传完成，成功${uploadResults.successResults.length}个，失败${uploadResults.failedResults.length}个`;
            }
            resolve(uploadResults); // 返回最终上传结果
        }).catch((err) => {
            console.error('上传过程中出现错误:', err);
            uni.showToast({ title: '部分文件上传失败', icon: 'none' });
            reject(err); // 返回错误
        });
    });
};
